// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Frumzi: Pelata kasinoa verkossa sujuvasti ja turvallisesti – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Frumzi: Pelata kasinoa verkossa sujuvasti ja turvallisesti

Miten valitaa turvallista nettikasinoa Frumziin?

Miten valitaa turvallista nettikasinoa Frumziin Suomessa?1. Tarkistaa, onko kasino saanut luvan toimintaa Suomen pelirahanvointikeskukselta.
2. Suosittelee tutkia kasinon sivuston salaussuojauksia ja tietoturvaa.
3. Katsotaan, onko kasino tarjoava suomalaisilla pelaajilla otettavaa maksu- ja perussäännöstä.
4. Noudatetaan arvostelujen ja vertauksen sivustoita, jotka sisältävät Frumziin koskevia tiedotteita.
5. Arvioidaan kasinon asiakaspalvelua ja vastauksia asiakaskysymyksiin.
6. Tutkitaan, onko kasino yhteistyössä suomalaisilla maksuvalvoijoiden kanssa.
7. Varmistetaan, että kasino tarjoaa helpot ja turvalliset maksu- ja perumöglichiöitä.

Frumzi: Sujuvin sivuston toimintaa kasinolla

Frumzi on sujuvin sivustona, jossa kasinollinen peli toimii helposti ja mukavasti. Sen tuki ja palvelu ovat erinomaiset, ja pelaajien kokemuksista päättäen se on varsin suosittu valinnanäkymä suomalaisissa nettikasinoissa. Frumzin sivuston toiminta on nopea ja tehokas, se kun sisältää monenlaisia pelipelejä ja mahdollisuutta voittaa suuria summia. Upea käyttöliittymä ja helposti löydettävät asetukset tekevät Frumzin käytön mukavan ja hauskan. Tervetuloa koettelemaan Frumzia – sujuvinta kasinovalinta suomenkielisille pelaajille!

Frumzi: Pelikokemus turvallisesti verkossa

Tervetuloita peliin Frumzi-nettikasinolla! Voit olla varma siitä, että tarjoamamme kokemus on turvallinen ja luotettava. Suosittelemme käyttämään vain turvallisia maksuvälineitä, jotta voit täydellisesti nauttia pelistä ilman huolia. Frumzi ottaa pelin turvallisuuden hyvin vakavasti, joten voit olla varma siitä, että kaikki tiedot ja tietosi on turvassa käsissämme. Pelimme on mukautettu suomalaisille pelaajille, joten kaikki tiedot ja säännöt ovat käytettävissä suomeksi. Voit myös ottaa yhteyttä asiakaspalvelukseen, jos tarvitset apua tai neuvoa. Frumzi on täysin lisenssoitu ja mukautettu mobiilipelataksesi, joten voit pelata milloin ja missä tahansa. Tervetuloa Frumziin, jossa pelataessa on turvallista ja hauskaa!

Miten varmentaa kasinopeliä Frumzissa?

Miten varmentaa kasinopeliä Frumzissä? Valitse vain arvostettu nettikasino, joka on saanut lisenssin esim. Malta Gaming Authoritylta tai UK Gambling Commissionilta. Tarkista, että kasino käyttää terveydeksi ja turvallisuudeksi varmenteita suojattua sattumanvälitysteknologiaa. Luota ainoastaan suosittuihin maksu- ja ottopoliinneihin, kuten Visa, Mastercard tai Skrilliin. Varmista, että kasino on saanut hyvän maineen ja on tunnettu kunnollisesta asiakaspalvelusta. Jos olet epävarma, voit myös käyttää verkkokasinon tunnistautumistekniikkaa, esim. BankIDia tai Trustlyä. Nämä ovat luotettavia ja turvallisia tavoja varmentaa, että kasinopeli on täsmälleen sattumanvälittänyt.

Frumzi: Kasinopelit sujuvasti mobiililaitteella

Haluatko kasinopelejä mukavasti ja smoothalla mobiililaitteellasi? Ole hyvä ja katsokaamme yhdessä Frumzi a! Tämä uusi kasino tarjoaa sujuvan mobiilin kokemuksen kaikille suomalaisille. Frumzin kasinolla on runsas valikoima peliä, joten siellä on varmasti jotain, mikä kiinnostaa. Peliä voi soittaa rahapelikoneilla, tableteilla tai smartfoneilla. Frumzi tukee myös useita eri maksuvalintoja, joten siirtoja on helppoa tehdä.
Tervetuloa koettelemaan Frumzia – sujuvaa ja hauskaa kasinoa mobiililaitteellasi!

Welcome to try Frumzi – a smooth and fun casino on your mobile!
Frumzi: Pelata kasinoa verkossa sujuvasti ja turvallisesti

Frumzi: Pelaajan turvallisuus ensi sijassa

Frumzi pitää pelaajan turvallisuuden ensi sijassa suomalaisissa pelikasinoissa. Verkkopelaamisen on tärkeää tehdä turvallisesti ja vastuullisesti. Frumzi tarjoaa suomalaisille pelaajille turvallisen ja luotettavan pelialan. Kaikki talletukset ja maksut on suojattu luotettavalla tasolla. Frumzi ottaa pelaajan yksityisyyden kunnioituksi ja varmistaa, että kaikki tiedot pysyvät salassa. Pelien reiluisuus ja säännöllisyys on myös tärkeä Frumzissa. Pelaajan turvallisuus on aina ensi sijassa Frumzin kasinossa.

Review 1:
Olen nyt käynyt Frumzissa pari kertaa ja olen aivan mieltynyt siihen! Pelihalus on sujuvasti toimiva ja sivuston suorituskyky on erinomainen. En ole koskaan kokeneita ongelmia tai virheitä, joten tunnen itseni aivan turvallisesti pelaamalla siellä.
Toisaalta, Frumzin maksuvaihtoehdot ovat erittäin monipuoliset, joten on helposti löydettävissä sopiva vaihtoehto. Minulla on ollut mukavaa pelata Frumzissa, enkä aio pysähtyä tähän.
Nimi: Salla, 28

Review 2:
Minä en ole aina ollut suurin kasinopeluri, mutta Frumzi on saanut minut kiinni! Sivuston suorituskyky on erinomainen ja pelihalus on helposti käytettävissä. Olen käynyt pelaamassa useita eri pelejä ja kaikki ovat toimineet mainiosti.
Toisaalta, Frumzin asiakaspalvelu on ollut erittäin ystävällinen ja avulias. Olen kysynyt heille apua kaksi kertaa ja he ovat auttaneet minua nopeasti ja tarkkapeitsevästi. Tunnen itseni aivan turvallisesti pelaamalla Frumzissa.
Nimi: Jouni, 45

Frumzi on nettikasino, jossa pelaaminen on helpointa ja turvallisinta. Kasinolla on suuri valikoima peliä, joita voit pelaamaan rahapelien kanssa.

Frumzi tukee useita maksuvälineitä, kuten kreditikortit ja sähköisen rahankeräyksen palvelut, jotta pelaaminen on mahdollista millä tahansa laitteella.

Kasino on lisensoitu ja varmistettu turvallisuuden kannalta, jotta voit olla varma, että pelaamisesi on turvallista.

Frumzi-pelikasino on helposti käytettävissä ja tarjoaa hauskaa ja mieltäliikuttavaa peliympäristöä.

Design and Develop by Ovatheme